import Vue from 'vue';

const digitsRE = /(\d{3})(?=\d)/g;

const numToArray = (val) => {
  const Num = `${val}`;
  const arr = [];
  const index = Num.length % 4;
  if (index) {
    arr.push(Num.substr(0, index));
  }
  for (let i = index; i < Num.length; i += 4) {
    // console.log(i);
    arr.push(Num.substr(i, 4));
  }
  // console.log(arr);
  return arr;
};

// 例如 18012344321 显示为 180 1234 4321
Vue.filter('mobileSpace', (value) => value.replace(/(\d{3})(\d{4})/, '$1 $2 '));

// 例如 2019-12-11 10:11:00 显示为2019-12-11
Vue.filter('date', (value) => value.split(' ')[0]);

// => 2020年7月20日
Vue.filter('dayFormat', (time, local = 'zh') => {
  if (time) {
    const options = { year: 'numeric', month: 'long' };
    return time.toLocaleDateString(local, options);
  }
  return '';
});

Vue.filter('currency', (val, currency = '¥', decimals = 2) => {
  const value = parseFloat(val);
  if (!Number.isFinite(value) || (!value && value !== 0)) return '';
  const stringified = Math.abs(value).toFixed(decimals);
  // 处理整数部分
  const integer = decimals ? stringified.slice(0, -1 - decimals) : stringified;
  const i = integer.length % 3;
  const head = i > 0 ? (integer.slice(0, i) + (integer.length > 3 ? ',' : '')) : '';
  // 处理小数部分
  const decimal = decimals ? stringified.slice(-1 - decimals) : '';
  const sign = value < 0 ? '-' : '';
  return sign + currency + head + integer.slice(i).replace(digitsRE, '$1,') + decimal;
});

Vue.filter('carNoEnCode', (cardNo) => {
  if (!cardNo) return '';
  return cardNo.replace(/(\d{4})(\d+)(\d{4})/, () => {
    const matches = [RegExp.$1, RegExp.$2, RegExp.$3];
    const [startNum, middleNum, endNum] = matches;
    const group = [];
    const GAP = 4;
    for (let i = 0; i < middleNum.length; i += GAP) {
      group.push(middleNum.substring(i, i + GAP));
    }
    return `${startNum} ${group.join(' ').replace(/\d/g, '*')} ${endNum}`;
  });
});

Vue.filter('convertToChinaNum', (val) => {
  if (!val || Number.isNaN(val)) return '零元';
  let integer;
  let dig;
  if (val.indexOf('.') === -1) {
    integer = val;
    dig = '';
  } else {
    const source = val.split('.');
    [integer, dig] = source;
  }
  const nuit = ['拾', '佰', '仟'];
  const stepNuit = ['元', '万', '亿', '万'];
  const ns = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
  const cnDecUnits = ['角', '分', '毫', '厘'];

  // 整数部分
  console.log(integer);
  const arr = numToArray(integer);
  console.log(arr);
  let chineseStr = '';
  for (let i = 0; i < arr.length; i += 1) {
    const item = arr[i];
    const len = item.length;
    for (let x = 0; x < len; x += 1) {
      const num = item[x];
      // console.log(x, num, x);
      // console.log(x, ns[num], nuit[2 - x]);
      if (x > len - 2) {
        chineseStr += parseInt(num, 10) ? `${ns[num]}` : '';
      } else {
        chineseStr += parseInt(num, 10) ? `${ns[num]}${nuit[len - 2 - x]}` : '零';
      }
    }
    chineseStr += `${stepNuit[arr.length - i - 1]}`;
    // console.log(`${arr[i]}${stepNuit[arr.length - i - 1]}`);
  }
  chineseStr = chineseStr.replace(/零+/g, '零');
  chineseStr = chineseStr.replace(/零亿/g, '亿').replace(/零万/g, '万').replace(/零元/g, '元');

  if (dig !== '') {
    const decLen = dig.length;
    for (let i = 0; i < decLen; i += 1) {
      const n = dig.substr(i, 1);
      if (n !== '0') {
        chineseStr += ns[Number(n)] + cnDecUnits[i];
      }
    }
    console.log(decLen);
  }
  return chineseStr;
});

Vue.filter('convertToChinaNum_back', (val) => {
  if (!val || Number.isNaN(val)) return '零元';
  const nuit = ['十', '百', '千', '万', '十', '百', '千', '亿'];
  const ns = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
  const addNuitList = ['亿', '兆']; // 兆后面是京
  addNuitList.forEach((e) => {
    nuit.push(e);
    nuit.forEach((item) => {
      if (e !== item) {
        nuit.push(item + e);
      }
    });
  });
  // console.log(val);
  const source = val.split('.');
  const num = source[0];
  // const dig = source[1];
  // console.log(source, num, dig);

  // 转换整数部分
  // const k1 = 0; // 计小单位
  // const k2 = 0; // 计大单位
  // const sum = 0;
  let str = `${num}`;
  console.log(str);
  const len = num.length; // 整数的长度
  const arr = [];
  // 5434
  for (let i = 0; i < len; i += 1) {
    let k1 = '';
    const number = parseInt(str.substr(i, 1), 10); // 计小单位
    const unit = (len - i - 1) > 0 ? nuit[len - i - 2] : '';
    const isZero = i !== len - 1 ? '零' : '';
    k1 = number ? ns[number] + unit : isZero;
    arr.push(k1);
  }
  str = `${arr.join('')}元`;
  str = str.replace(/零+/g, '零');
  str = str.replace(/^壹十/g, '十');

  // const english = num.toString().split('');
  // let result = '';
  // console.log(english);
  // // console.log(priceTostr);
  // for (let i = 0; i < english.length; i += 1) {
  //   const desIndex = english.length - 1 - i; // 倒序排列设值
  //   result = nuit[i] + result;
  //   const arr1Index = english[desIndex];
  //   result = ns[arr1Index] + result;
  // }
  // // 将【零千、零百】换成【零】 【十零】换成【十】
  // result = result.replace(/零(千|百|十)/g, '零').replace(/十零/g, '十');
  // // 合并中间多个零为一个零
  // result = result.replace(/零+/g, '零');
  // // 将【零亿】换成【亿】【零万】换成【万】
  // result = result.replace(/零亿/g, '亿').replace(/零万/g, '万');
  // // 将【亿万】换成【亿】
  // result = result.replace(/亿万/g, '亿');
  // // 移除末尾的零
  // result = result.replace(/零+$/, '');
  // // 将【零一十】换成【零十】
  // // result = result.replace(/零一十/g, '零十');//貌似正规读法是零一十
  // // 将【一十】换成【十】
  // result = result.replace(/^一十/g, '十');
  // return result;
  return str || '零元';
});

Vue.filter('account', (val) => {
  if (!val) return '';
  const first = val.substr(0, 4);
  const end = val.substr(-4, 4);
  const result = `${first} **** **** ${end}`;
  return result;
});

Vue.filter('applyType', (val) => {
  if (val) {
    if (val === '102') return '交易成功';
    if (val === '103') return '交易失败';
    if (val === '104') return '业务已受理';
    if (val === '105') return '交易超时';
    if (val === '106') return '交易作废';
    if (val === '107') return '交易部分成功 批量转账部分成功';
    if (val === '108') return '银行处理中 落地业务已受理';
    if (val === '109') return '交易撤销';
    if (val === '111') return '待银行审批 大额落地';
    if (val === '113') return '待银行审批 监管账户落地';
    if (val === '114') return '待银行审批 交易资金监管落地';
    if (val === '112') return '银行处理中 境内外币交易落地柜面';
    if (val === '115') return '银行处理中 购汇非白名单落地柜面';
    if (val === '116') return '银行处理中 FT账户落地柜面';
    if (val === '117') return '银行处理中 境外汇款交易落地柜面';
    if (val === '118') return '银行处理中 境内人民币交易落地柜面';
    if (val === '200') return '待复核';
    if (val === '201') return '录入待授权';
    if (val === '202') return '复核待授权';
    if (val === '203') return '等待继续授权';
    if (val === '204') return '待上级企业授权';
    if (val === '205') return '等待自动发送';
    if (val === '206') return '待手工发送';
    if (val === '210') return '授权完成';
    if (val === '290') return '复核被拒绝';
    if (val === '291') return '授权被拒绝';
    if (val === '292') return '上级企业授权被拒绝';
    if (val === '293') return '预约超期作废';
  }
  return '';
});

Vue.filter('busCode', (val) => {
  if (val === '99') return '境内人民币汇款';
  if (val === '204') return '活期转定期';
  return '';
});

Vue.filter('dateFormat', (val) => {
  if (val) {
    const dateStr = `${val.substr(0, 4)}-${val.substr(4, 2)}-${val.substr(6, 2)}`;
    return dateStr;
  }
  return '';
});
